
package com.freepay.application.impl;

import com.freepay.application.CobroService;
import com.freepay.domain.model.datafono_virtual.*;
import com.freepay.domain.model.empresa_vendedora.*;
import com.freepay.domain.model.factura.*;
import com.freepay.domain.service.*;

public class CobroServiceImpl implements CobroService {

    private final CajeroRepository cajeroRepository;
    private final FacturaRepository facturaRepository;
    private final DatafonoVirtualRepository datafonoVirtualRepository;
    private final SeguridadAccesoService seguridadAccesoService;
    private final TransaccionService transaccionService;

    public CobroServiceImpl(final CajeroRepository cajeroRepository,
            final FacturaRepository facturaRepository,
            final DatafonoVirtualRepository datafonoVirtualRepository,
            final SeguridadAccesoService seguridadAccesoService,
            final TransaccionService transaccionService) {
        this.cajeroRepository = cajeroRepository;
        this.facturaRepository = facturaRepository;
        this.datafonoVirtualRepository = datafonoVirtualRepository;
        this.seguridadAccesoService = seguridadAccesoService;
        this.transaccionService = transaccionService;

    }

    @Override
    public CodigoQR generarCobro(final int idCajero, final int codigoFactura, final int codigoDatafono) {

        Cajero cajero = cajeroRepository.getInstance(idCajero);
        Factura factura = facturaRepository.getInstance(codigoFactura);
        DatafonoVirtual datafonoVirtual = datafonoVirtualRepository.getInstance(codigoDatafono);

        if (factura.valorPagar() == 0 || factura.cantidadItemsFactura() == 0) {
            return null;
        }

        if (seguridadAccesoService.autenticarUsuario(cajero)) {

            return transaccionService.generarCodigoQR(factura, cajero, datafonoVirtual);

        }

        return null;

    }
}
